package com.ruoyi.system.service.impl;

import java.util.List;
import com.ruoyi.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.FdProductMapper;
import com.ruoyi.system.mapper.FdProductTypeMapper;
import com.ruoyi.system.domain.FdProduct;
import com.ruoyi.system.service.IFdProductService;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.SecurityUtils;

/**
 * 产品信息Service业务层处理
 *
 * @author ruoyi
 * @date 2025-05-12
 */
@Service
public class FdProductServiceImpl implements IFdProductService
{
    @Autowired
    private FdProductMapper fdProductMapper;

    @Autowired
    private FdProductTypeMapper fdProductTypeMapper;

    /**
     * 查询产品信息
     *
     * @param productId 产品信息主键
     * @return 产品信息
     */
    @Override
    public FdProduct selectFdProductByProductId(Long productId)
    {
        return fdProductMapper.selectFdProductByProductId(productId);
    }

    /**
     * 查询产品信息列表
     *
     * @param fdProduct 产品信息
     * @return 产品信息
     */
    @Override
    public List<FdProduct> selectFdProductList(FdProduct fdProduct)
    {
        return fdProductMapper.selectFdProductList(fdProduct);
    }

    /**
     * 新增产品信息
     *
     * @param fdProduct 产品信息
     * @return 结果
     */
    @Override
    public int insertFdProduct(FdProduct fdProduct)
    {
        fdProduct.setCreateTime(DateUtils.getNowDate());
        return fdProductMapper.insertFdProduct(fdProduct);
    }

    /**
     * 修改产品信息
     *
     * @param fdProduct 产品信息
     * @return 结果
     */
    @Override
    public int updateFdProduct(FdProduct fdProduct)
    {
        fdProduct.setUpdateTime(DateUtils.getNowDate());
        return fdProductMapper.updateFdProduct(fdProduct);
    }

    /**
     * 批量删除产品信息
     *
     * @param productIds 需要删除的产品信息主键
     * @return 结果
     */
    @Override
    public int deleteFdProductByProductIds(Long[] productIds)
    {
        return fdProductMapper.deleteFdProductByProductIds(productIds);
    }

    /**
     * 删除产品信息信息
     *
     * @param productId 产品信息主键
     * @return 结果
     */
    @Override
    public int deleteFdProductByProductId(Long productId)
    {
        return fdProductMapper.deleteFdProductByProductId(productId);
    }

    @Override
    public String importFdProduct(List<FdProduct> productList) {
        if (productList == null || productList.isEmpty()) {
            return "导入产品数据为空";
        }
        int successNum = 0;
        int failureNum = 0;
        StringBuilder failureMsg = new StringBuilder();
        SysUser currentUser = SecurityUtils.getLoginUser().getUser();
        for (FdProduct product : productList) {
            try {
                // 根据产品类型名称查询产品类型 ID
                Long productTypeId = fdProductTypeMapper.selectProductTypeIdByTypeName(product.getProductTypeName());
                if (productTypeId == null ||productTypeId == 0) {
                    failureNum++;
                    failureMsg.append("<br/>").append(failureNum).append("、产品编号 ").append(product.getProductCode()).append(" 产品类型不存在").append(product.getProductTypeName());
                    continue;
                }else{
                    product.setProductTypeId(productTypeId);
                }

                // 检查产品编号是否重复
                FdProduct existingProduct = fdProductMapper.selectFdProductByProductCode(product.getProductCode());
                if (existingProduct != null) {
                    failureNum++;
                    failureMsg.append("<br/>").append(failureNum).append("、产品编号 ").append(product.getProductCode()).append(" 已存在，导入失败。");
                    continue;
                }

                // 设置创建人信息
                product.setCreateBy(currentUser.getUserName());
                // 插入产品信息
                fdProductMapper.insertFdProduct(product);
                successNum++;
            } catch (Exception e) {
                failureNum++;
                failureMsg.append("<br/>").append(failureNum).append("、产品编号 ").append(product.getProductCode()).append(" 导入失败：").append(e.getMessage());
            }
        }
        if (failureNum > 0) {
            failureMsg.insert(0, "很抱歉，导入失败！共 " + failureNum + " 条数据导入失败，错误如下：");
        } else {
            failureMsg.insert(0, "恭喜您，数据已全部导入成功！共 " + successNum + " 条。");
        }
        return failureMsg.toString();
    }
}
